Object.prototype.implementsMethod = function(method) {
	return !!(this[method] && this[method] instanceof Function)
};

Object.prototype.implementsProperty = function(property) {
	return !!(this[property] && !(this[property] instanceof Function))
};

var johnSmith = {name: "Jan", surname: "Kowalski", writeCode: function() {...}};

johnSmith.implementsMethod("name");		// wynik: true
johnSmith.implementsMethod("writeCode");	// wynik: true
johnSmith.implementsMethod("writePoems");	// wynik: false


class SoftwareHouse {
	constructor() {
		this.employees = [];
	}

	hire(dev) {
		if (dev.implementsMethod("writeCode") && dev.implementsProperty("name")) {
			this.employees.push(dev);
			} else {
				throw new Error("Argument jest niezgodny z żądanym interfejsem.")
			}
	}
}
